/*利用适当的容器类实现电话簿类CPhoneBook，要求如下：
（1）联系人信息包括：姓名，电话号码；
（2）支持添加新联系人、删除联系人；
（3）支持双向查找：给定姓名查找电话号码，给定电话号码查找姓名。
提示：使用map实现。*/
//vector版本
/*1.使用<vector>储存联系人信息，支持动态添加和删除
2.范围for遍历*/
#include<iostream>
#include<string>
#include<vector>

using namespace std;
class contact
{
  protected:
    string name;
  string phonenum;
  contact(const string&nm,const string&num):name(nm),phonenum(num){};
  friend class CPhoneBook;
};
class CPhoneBook
{
    private:
    vector<class contact>contacts;
    public:
    //添加，删除联系人
    void add(const string& name,const string &phonenum )
    {
        for(const auto&contact:contacts)
        if(contact.name==name||contact.phonenum==phonenum)
        return ;
         contacts.push_back(contact(name,phonenum));
    }
    //delete和内置关键字重复了
    void del(const string&name,const string&phonenum)
    {
        for(auto it=contacts.begin();it!=contacts.end();++it)
        {
            if((it->name)==name)
            {
                contacts.erase(it);
                return ;
            }
            if(it->phonenum==phonenum)
            {
                contacts.erase(it);
                return;
            }
        }
    }
    string findPbN(const string& name)
    {
        for(const auto&contact:contacts)
        {
            if(contact.name==name)//不可访问？
            return contact.phonenum;
        }
        return "未找到联系人： "+name;//字符串的运算
    } 
    
    string findNbP(const string &phonenum)
    {
        for(const auto&contact:contacts)
        {
            if(contact.phonenum==phonenum)
            return contact.name;
        }
    }
    void printAll()const
    {
        if(contacts.empty())
        return;
        for(const auto&contact:contacts)
        cout<<contact.name<<"-"<<contact.phonenum<<endl;
    }
};
int main()
{
    CPhoneBook phoneBook;

    // 添加联系人
    phoneBook.add("Alice", "123456789");
    phoneBook.add("Bob", "987654321");
    phoneBook.add("Charlie", "555666777");

    // 打印所有联系人
    phoneBook.printAll();

    // 查找电话号码
    cout << "查找 Alice 的电话号码: " << phoneBook.findPbN("Alice") << endl;

    // 查找姓名
    cout << "查找电话号码 987654321 的联系人: " << phoneBook.findNbP("987654321") << endl;

    // 删除联系人
    phoneBook.del("Alice","555666777");
    

    // 打印所有联系人
    phoneBook.printAll();

    return 0;

}